//
//  JKStatusListDAL.swift
//  新浪微博
//
//  Created by Jack.Lin on 16/7/21.
//  Copyright © 2016年 Jack.Lin. All rights reserved.
//

import Foundation

// DAL - Data Access Layer 数据访问层
// 使命: 负责处理数据库和网络数据, 给 listVew 返回微博的 字典数组
// 在调整系统的时候, 尽量做最小话的调整!

class JKstatusListDAL {

   // 从本地数据库或者网络加载数据
    
    class func loadStatus(since_id: Int64 = 0, max_id: Int64 = 0, completion: (list: [[String: AnyObject]]?, isSuccess: Bool)->()) {
        
        // 1. 检查本地数据, 如果有, 直接返回
        // 0> 获取用户代号
        guard let userId = JKNetworkManager.shared.userAccount.uid else {
            return
        }
        // 1> 检查本地数据, 如果有, 直接返回
        let array = CZSQLiteManager.shared.loadStatus(userId: userId, since_id: since_id, max_id: max_id)
        
        if array.count > 0 {
            completion(list: array, isSuccess: true)
            
            return
        }
        // 2. 加载网络数据
        JKNetworkManager.shared.statusList(since_id: since_id, max_id: max_id) { (list, isSuccess) in
            // 1> 判断网络请求是否成功
            if !isSuccess {
                completion(list: nil, isSuccess: false)
                
                return
            }
            // 判断数据
            guard let list = list else {
                completion(list: nil, isSuccess: isSuccess)
                
                return
            }
            // 3. 加载完成之后, 将网络数据[字典数组], 写入数据库
            CZSQLiteManager.shared.updateStatus(userId: userId, array: list)
            
            // 4. 返回网络数据
            completion(list: list, isSuccess: isSuccess)
            
        }
    }
}
